package com.ssyan.principle.OCP.improve;

/**
 * @author ssyan
 * @Description 七大设计原则之五：开闭原则
 *              抽象基类，提供抽象方法
 *              子类来实现，这样使用方不需要修改代码
 * @create 2021/8/26 0:21
 * @Version 1.0
 */
public class OCP {
    public static void main(String[] args) {
        //使用看看存在的问题
        GraphicEditor graphicEditor = new GraphicEditor();
        graphicEditor.drawShape(new Rectangle());
        graphicEditor.drawShape(new Circle());
        graphicEditor.drawShape(new Triangle());
        graphicEditor.drawShape(new OtherGraphic());
    }
}

//这是一个用于绘图的类
class GraphicEditor {
    //接收Shape对象，调用draw方法
    public void drawShape(Shape s){
        s.draw();
    }
}

//Shape类，基类
abstract class Shape {
    public abstract void draw();//抽象方法
}

//新增画三角形
class Triangle extends Shape {

    @Override
    public void draw() {
        System.out.println("绘制三角形");
    }
}

class Rectangle extends Shape {

    @Override
    public void draw() {
        System.out.println("绘制矩形");
    }
}

class Circle extends Shape {

    @Override
    public void draw() {
        System.out.println("绘制圆形");
    }
}

//新增一个图形
class OtherGraphic extends Shape {

    @Override
    public void draw() {
        System.out.println("绘制其他图形");
    }
}
